package com.wander.designStructural.flyweight;

/**
 * 享元模式相当于池化技术
 * 复用对象最简单的方式是，用一个 HashMap 来存放每次新生成的对象。每次需要一个对象的时候，
 * 先到 HashMap 中看看有没有，如果没有，再生成新的对象，然后将这个对象放入 HashMap 中。
 *
 * 享元模式的好处
 * 1. 节省内存。通过享元模式掌握共享的享元对象,从而减少对象的个数,节省内存。
 * 2. 加速对象创建。通过共享的享元对象,减少对象创建的次数,加速对象的创建过程。
 * 3. 线程安全。享元工厂需要保证享元对象在多线程环境下的线程安全,通常使用锁机制来实现。
 * @author WDYin
 * @date 2023/5/30
 **/
public class Client {
    public static void main(String[] args) {
        FlyweightFactory factory = new FlyweightFactory();

        Flyweight flyweight1 = factory.getFlyweight("a");
        flyweight1.operation("A");

        Flyweight flyweight2 = factory.getFlyweight("b");
        flyweight2.operation("B");

        Flyweight flyweight3 = factory.getFlyweight("a");
        flyweight3.operation("C");

        System.out.println(flyweight1 == flyweight3); // 输出 true，说明享元对象被共享了
    }
}
